package pruebasDeIntegracion;

import juego.Escenario;
import org.junit.*;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import objetos.aeronaves.Algo42;
import objetos.aeronaves.civiles.*;
import objetos.aeronaves.enemigos.*;

public class IntegracionTest {
	/* Creo aeronaves que van a participar */
	Algo42 algo42 = new Algo42(1, 1);
	AvionCivil avionCivil = new AvionCivil(2, 3);
	Bomber bomber = new Bomber(2, 6);
	Caza caza = new Caza(5, 5);
	Scout scout = new Scout(8, 9);
	Escenario escena = Escenario.getInstance();

	@Before
	public void setUp() {
		algo42.darVida();
		avionCivil.darVida();
		bomber.darVida();
		caza.darVida();
		scout.darVida();
		ControladorJuego controlador = new ControladorJuego(false);
		escena.setControlador(controlador);
	}

	@Test
	public void entrarAlEscenarioTest() {
		Escenario.getInstance().setActor(algo42);
		Escenario.getInstance().agregarObjeto(avionCivil);
		Escenario.getInstance().agregarObjeto(bomber);
		Escenario.getInstance().agregarObjeto(caza);
		Escenario.getInstance().agregarObjeto(scout);

		Assert.assertSame(algo42, escena.getActor());
		Assert.assertTrue(escena.getEnemigos().contains(bomber));
		Assert.assertTrue(escena.getEnemigos().contains(caza));
		Assert.assertTrue(escena.getEnemigos().contains(scout));
		Assert.assertTrue(escena.getCiviles().contains(avionCivil));

		System.out
				.println("Los objetos son agregados al Escenario correctamente");
	}

	@Test
	public void disparosTest() {
		for (int i = 0; i < 20; i++) {
			bomber.disparar();
			caza.disparar();
			scout.disparar();
		}

		Assert.assertFalse(escena.getProyectilesEnemigos().isEmpty());
		algo42.dispararLaser();
		Assert.assertFalse(escena.getProyectilesDelAlgo42().isEmpty());
		bomber.destruir();
		System.out.println("Los disparos funcionan correctamente");
	}

	@Test
	public void colisiones() {
		caza.colisionConAlgo42(algo42);
		algo42.colisionConProyectil(escena.getProyectilesEnemigos().get(0));
		bomber.colisionConProyectil(escena.getProyectilesDelAlgo42().get(0));
		Assert.assertFalse(escena.getEnemigos().isEmpty());
		Assert.assertTrue(caza.estaDestruido());
		Assert.assertFalse(escena.getActor().estaDestruido());
		System.out.println("Los objetos saben colisionar entre ellos");
	}

}
